package ch8;

public class TryClass {

	public static void main(String[] args) {
		
		int a=1,b=0;
		//1.异常处理方法
		try {
			int c=a/b;
		} catch (Exception e) {
			//向上抛出异常
			//throw e;
		}
		
		//2.try{} finally{}
		/*
		 * try { int c=a/b; } finally { System.out.println("一定会执行的代码"); }
		 */
		
		//3.try catch finally
		try {
			int c=a/b;//可能发生异常的代码
			
		} catch (Exception e) {
			//发生异常后需要执行的代码
		}finally {
			//不管是否发生异常一定要执行的代码
			System.out.println("一定会执行的代码");
		}
		
		//4.try catch catch finally
		try {
			int c=a/b;
			int[] array=new int[3];
			array[3]=5;
			
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("数组下标越界");
		}catch (ArithmeticException e) {//使用多个catch块时，需要注意：异常类的父子关系，父类异常需要写到后面
			System.out.println("发生了算术运算异常");
		}finally {
			System.out.println("一定会执行的代码");
		}
		
		
		//5.try catch finally - JDK1.7后支持
		try {
			int c=a/b;
			int[] array=new int[3];
			array[3]=5;
			
		} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {//使用一个catch捕获多个异常，异常不能有父子关系
			System.out.println("数组下标越界 或 发生了算术运算异常");
			//System.exit(0);//直接退出程序，不执行finally

		}finally {
			//不管是否发生异常一定会执行的代码，如果try或catch中执行了System.exit(0);则不执行finally
			System.out.println("一定会执行的代码");
		}
		
		//6.
		try {
			try {
				try {
					
				} catch (Exception e) {
					
				}
			} catch (Exception e) {
				
			}
		} catch (Exception e) {
			
		}
		
		try {
			System.out.println("执行try");
			return;//1.返回一个数据值；2.终止一个方法的执行
		} catch (Exception e) {
			System.out.println("执行catch");
		}finally {
			//在try或catch中，如果执行了return语句finally块还会执行
			System.out.println("执行finally");
		}
		
		
		System.out.println("main方法执行完毕");
	}
	
	

}
